package com.yaoxiaoqing.objectclass;
/*
 * 方法的重载(overload) loading...
 *
 * 1.定义:在同一个类中，允许存在一个以上的同名方法，只要它们的参数个数或者参数类型不同即可。
 *
 * 		“两同一不同”:同一个类、相同方法名
 * 				  参数列表不同：参数个数不同，参数类型不同,顺序不同
 *
 * 2.举例:
 * 		Arrays类中重载的sort() / binarySearch()
 *
 * 3.判断是否重载
 * 		与方法的返回值类型、权限修饰符、形参变量名、方法体都无关。
 *
 * 4.在通过对象调用方法时，如何确定某一个指定的方法：
 * 		方法名---》参数列表
 */


/*
 * 1.编写程序，定义三个重载方法并调用。方法名为mOL。
 * 三个方法分别接收一个int参数、两个int参数、一个字符串参数。
 * 分别执行平方运算并输出结果，相乘并输出结果，输出字符串信息。
 * 在主类的main ()方法中分别用参数区别调用三个方法。
 * 2.定义三个重载方法max()，
 * 第一个方法求两个int值中的最大值，
 * 第二个方法求两个double值中的最大值，
 * 第三个方法求三个double值中的最大值，并分别调用三个方法。
 *
 */

/*
 * 可变个数形参的方法
 * 1.jdk 5.0新增的内容
 * 2.具体使用：
 * 	2.1 可变个数形参的格式：数据类型 ... 变量名
 * 	2.2 当调用可变个数形参的方法时，传入的参数的个数可以是：0个，1个，2个...
 * 	2.3可变个数形参的方法与本类中方法名相同，形参不同的方法之间构成重载。
 *  2.4可变个数形参的方法与本类中方法名相同，形参类型也相同的数组之间不构成重载。即二者不可共存。
 *  2.5可变个数形参在方法中的形参中,必须声明在末尾。
 *  2.6可变个数形参在方法中的形参中，最多只能声明一个可变形参。
 */
public class MethodOverLoad {
    public static void main(String[] args) {

        MethodOverLoad test = new MethodOverLoad();
        //1.调用3个方法
        test.mOL(5);
        test.mOL(6, 4);
        test.mOL("fg");

        //2.调用3个方法
        int num1 = test.max(18, 452);
        System.out.println(num1);
        double num2 = test.max(5.6, -78.6);
        System.out.println(num2);
        double num3 = test.max(15, 52, 42);
        System.out.println(num3);


    }
    //1.如下三个方法构成重载
    public void mOL(int i){
        System.out.println(i*i);
    }
    public void mOL(int i,int j){
        System.out.println(i*j);
    }
    public void mOL(String s){
        System.out.println(s);
    }

    //2.如下三个方法构成重载
    public int max(int i,int j){
        return (i > j) ? i : j;
    }
    public double max(double i,double j){
        return (i > j) ? i : j;
    }
    public double max(double d1,double d2,double d3){
        double max = (d1 > d2) ? d1 : d2;
        return (max > d3) ? max : d3;
    }

}
